import { SetMetadata } from '@nestjs/common';

export const IS_PUBLIC_KEY = 'isPublic';
export const Public = () => SetMetadata(IS_PUBLIC_KEY, true);

// 这段代码是在使用 NestJS 框架创建一个自定义装饰器 Public。装饰器是 TypeScript 的一个特性，它可以用来修改类、方法、属性或参数的行为。

// 在这段代码中，Public 装饰器使用了 NestJS 的 SetMetadata 函数来设置元数据。元数据是一种可以附加到类、方法、属性或参数上的额外信息。

// SetMetadata 函数接收两个参数：一个键和一个值。在这个例子中，键是 'isPublic'，值是 true。这意味着当你在一个路由处理程序上使用 @Public() 装饰器时，NestJS 将会把 'isPublic' 键的元数据设置为 true。

// 你可以在守卫中使用 Reflector 来获取这个元数据，以决定是否允许未经认证的用户访问被 @Public() 装饰的路由.

// 这样，你就可以在你的应用中使用 @Public() 装饰器来标记那些允许未经认证的用户访问的路由了。
